import axios from 'axios';

// 提示框
import { showMsg, showAlert } from './_base.js';

// 加载动画
import { ElLoading } from 'element-plus';
// 加载框
let oLoadingInstance = null;

// 请求时长
axios.defaults.timeout = 60000;

// 配置请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';

// 请求拦截
axios.interceptors.request.use(
    config => {
        const token = localStorage.getItem('token');
        let { data: oReqData, url: sUrl } = config;
        //前端模拟数据时，将后缀统一替换为 json
        // if (!BPROD) {
        //     sUrl = sUrl.replace(/([^/.]+)(\.[^/.]+)?$/, '$1.json'); //替换后缀
        // }

        // if (!token) {
        //     showMsg('本地通行证已过期，前往登录')
        //     // router.push('/login')
        //     return
        // }
        // token && (config.headers.Authorization = token);
        config.url = sUrl;
        config.headers.token = token;
        // axios.defaults.headers.common.token = token
        return config;
    },
    error => {
        return Promise.error(error);
    }
);

// 响应拦截
axios.interceptors.response.use(
    response => {
        // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据     
        // 否则的话抛出错误
        if (response.status === 200) {
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
    },
    error => {
        if (error.response.status) {
            return Promise.reject(error.response);
        }
    }
);

//封装请求
export function fRequest({ url, params, method, headers, }) {
    let sMethod = method || 'post'; // 默认post请求
    let oHeader = { ...headers } || {};// 自定义请求头
    let sParamsKey = 'data'; // 请求参数的键名

    if (sMethod == 'post') { // 为post请求的时候
        sParamsKey = 'data';
        oHeader = {
            "Content-Type": "application/json"
        }
    } else if (sMethod == 'get') { // 为get请求的时候
        sParamsKey = 'params';
        oHeader = {
            "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
        }
    };
    return new Promise((resolve, reject) => {
        oLoadingInstance = ElLoading.service({
            text: '正在疯狂请求中，请稍等！',
            lock: true,
            spinner: 'el-icon-loading',
            background: 'rgba(0, 0, 0, 0.6)'
        });
        axios({
            method: sMethod,
            url,
            [sParamsKey]: { ...params },
            headers: { ...oHeader },
        }).then(res => {
            oLoadingInstance.close();
            resolve(res.data);
        }).catch(err => {
            oLoadingInstance.close();
            reject(err.data);
        });
    })
};
